package com.jiufen.Controller;

import com.jiufen.Pojo.PageResult;
import com.jiufen.Pojo.Result;
import com.jiufen.Pojo.Student;
import com.jiufen.Pojo.StudentQueryParam;
import com.jiufen.Service.StudentService;
import com.jiufen.anno.LogOperate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.Arrays;

@RestController
@Slf4j
@RequestMapping("/students")
public class StudentController {

    @Autowired
    private StudentService studentService;

    /**
     * 4. 学员管理
     * 4.1 学员列表查询
     * 4.1.1 基本信息
     * 请求路径：/students
     * 请求方式：GET
     * 接口描述：该接口用于学员列表数据的条件分页查询
     */
    @GetMapping
    public Result getStudentList(StudentQueryParam studentQueryParam) {
        log.info("分页加条件查询学生信息={}", studentQueryParam);
        PageResult<Student> studentList = studentService.getStudentList(studentQueryParam);
        log.debug("查询出学生信息为：{}",studentList);
        return Result.success(studentList);
    }

    /**
     * 4.3 添加学员
     * 4.3.1 基本信息
     * 请求路径：/students
     * 请求方式：POST
     * 接口描述：该接口用于添加学员信息
     */
    @LogOperate
    @PostMapping
    public Result saveStudent(@RequestBody Student student) {
        log.info("保存学生信息={}", student);
        studentService.saveStudent(student);
        return Result.success();
    }


    /**
     * 4.4 根据ID查询
     * 4.4.1 基本信息
     * 请求路径：/students/{id}
     * 请求方式：GET
     * 接口描述：该接口用于根据主键ID查询学员的信息
     *
     * 请求参数
     * 参数格式：路径参数
     * 参数说明：
     * 请求参数样例：/students/8
     */
    @GetMapping("/{id}")
    public Result getStudentById(@PathVariable Integer id) {
        log.info("根据ID查询学生信息参数：--{}",id);
        Student student = studentService.getStudentById(id);
        log.debug("根据ID查询学生信息结果：--{}",student);
        return Result.success(student);
    }


    /**
     * 4.5 修改学员
     * 4.5.1 基本信息
     * 请求路径：/students
     * 请求方式：PUT
     * 接口描述：该接口用于修改学员的数据信息
     *
     * 4.5.2 请求参数
     * 参数格式：application/json
     * 参数说明：
     */
    @LogOperate
    @PutMapping
    public Result updateStudent(@RequestBody Student student) {
        log.info("Controller-修改学生信息={}", student);
        studentService.updateStudent(student);
        return Result.success();
    }
    /**
     * 4.2 删除学员
     * 4.2.1 基本信息
     * 请求路径：/students/{ids}
     * 请求方式：DELETE
     * 接口描述：该接口用于批量删除学员信息
     *
     * 4.2.2 请求参数
     * 参数格式：路径参数
     * 参数说明：
     * 请求参数样例：/students/1,2,3
     */
    @LogOperate
    @DeleteMapping("/{ids}")
    public Result deleteStudent(@PathVariable Integer[] ids) {
        log.info("删除学生信息参数：--{}", Arrays.toString(ids));
        Integer deleteNumber = studentService.deleteStudent(ids);
        log.info("删除学生ID={}，删除成功条数={}",Arrays.toString(ids),deleteNumber);
        return Result.success();
    }

    /**
     * 4.6 违纪处理
     * 4.6.1 基本信息
     * 请求路径：/students/violation/{id}/{score}
     * 请求方式：PUT
     * 接口描述：该接口用于修改学员的数据信息
     *
     * 4.6.2 请求参数
     * 参数格式：路径参数
     * 参数说明：
     * 暂时无法在飞书文档外展示此内容
     */
    @LogOperate
    @PutMapping("/violation/{id}/{score}")
    public Result updateStudentViolation(@PathVariable Integer id,@PathVariable Integer score) {
        log.info("违纪处理参数：--{},违纪分数:{}",id,score);
        studentService.updateStudentViolation(id,score);
        return Result.success();

    }
}
